Reverse String II
Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
For Example:
|
|
Restrictions:
- The string consists of lower English letters only.
- Length of the given string and k will in the range [1, 10000]
提示 | 解題應用 |
---|---|
String | 規律觀查 |
Default:
|
|
解答思路:
這題主要是做字串上規律的觀查,字串中前k個字做倒轉,下一組k個字就不需要,而再下一組k就再做倒轉,換句話說就是如果以一組一組來看的話index值除以k如果商數為0就在第一組,商數為1就在第二組,商數為2就在第三組,這麼說只要商數為偶數該字母就必然是歸類於做倒轉的字串,在得知這樣規則的前提下就可以沒有壓力的解決問題。
程式碼解說:
一開始從字串一一取出字母,正如先前有的結論,將index值除以k先知道落在哪一組,再將商數與2相除取餘數,如果餘數為0表示商數為偶數要做倒轉,這時就將倒轉註記為true,否則餘數為1的情況則註記為false,再將先前已經暫存倒轉的字串加入結果之中並清空暫存,而再決定好是否倒轉後就要開始處理每個字母,因為golang取出字母為rune值所以要先轉成字串再開始動作,接著如果該字母需要倒轉,就存在暫存字串的開頭,待所有該組字母皆倒轉完畢(在先前的判斷倒轉註記為false)才整組放入結果,而如果該字母不需要倒轉,則直則依序放入結果後頭即可,最後待遍歷字串結束後,因為有可能暫存字串還留有尚未放入結果的字元,所以最後要再一次將暫存字串放入結果後頭之中才做回傳
|
|
完整程式碼:
|
|
總結:
要將一字串中前k個字做倒轉,下一組k個字就不需要,而再下一組k就再做倒轉…等等以此類推,如果以一組一組來看的話index值除以k如果商數為0就在第一組,商數為1就在第二組,商數為2就在第三組,這麼說只要商數為偶數該字母就必然是歸類於做倒轉的字串,在得知這樣規則的前提下就可以沒有壓力的解決問題。